#include <iostream>
#include <unordered_set>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
int nRet=INF;
int n;
bool check(int num){
	if(num<2){
		return false;
	}
	for(int i=2;i<=sqrt(num);++i){
		if(num%i==0){
			return false;
		}
	}
	return true;
}
void dfs(int cur,int sum,unordered_set<int>& has,const vector<int>& vecArr){
	if(sum>=nRet){
		return;
	}
	if(cur>=n){
		nRet=min(nRet,sum);
		return;
	}
	for(int i=2;i<=vecArr[cur];++i){
		if(vecArr[cur]%i==0 && check(i) && has.count(i)==0){
			has.insert(i);
			dfs(cur+1,sum+i,has,vecArr);
			has.erase(i);
		}
	}
}
int main() {


	cin>>n;
	vector<int> vecArr(n);
	for(int i=0;i<n;++i){
		cin>>vecArr[i];
	}
	unordered_set<int> has;
	dfs(0,0,has,vecArr);
	if(nRet==INF){
		nRet=-1;
	}
	cout<<nRet<<endl;
	
	return 0;
}
